理解ROS节点和话题

ROS系统包括多个独立的节点,每个节点通过一个发布/订阅的消息范式与其他节点联系 !如下图中,publisher和subscriber都可以是节点(node)

举个具体例子: ROS starts with the ROS Master. Let’s say we have a camera on our Robot. We want to be able to see the images from the camera, both on the Robot itself, and on another laptop. ROS开始于一个Master,一如我们的机器人上有个摄像头,然后我们想在机器人和笔记本上看到照片,笔记本就有一个Image display(IDN)节点,同时机器人上也有节点,一个是Image Processing Node(IRN), 另一个是Camera Node(CN)。

首先,所有的节点都要到Master登记(register),这样Master才能知道信息要传到哪个节点 比如,CN会说他会发布XX信息(这里是image_data),其他两节点则说要订阅这个信息。 接着他收到信息后就把信息发给其他两节点了。 也可以订阅特殊服务。

•rospy = python 客户端库 •roscpp = c++ 客户端库

接下来我们说一下ROS的与节点和话题有关的命令

  1. 我们运行roscore,这是我们运行所有ros程序前首先要运行的命令

    $ roscore

  2. 打开一个新的终端

rosnode list

列出正在运行的节点,这里我们可以看到/rosout,这个节点用于收集和记录节点调试输出信息。

rosnode info [node_name]

这个命令可以返回关于一个特定节点的信息,这里node_name是/rosout

rosrun [package_name] [node_name]

我们运行模拟器turtlesim试试$ rosrun turtlesim turtlesim_node,这里会出现一个窗口,窗口上有只龟

rosrun turtlesim turtlesim_node __name:=my_turtle

改节点名,不过仅当前有效,下次打开仍然是turtlesim_node。

  1. 再打开另一个终端。

    rosrun turtlesim turtle_teleop_key turtle_teleop_key是turtlesim的另一个节点,可以通过键盘控制乌龟运动

  2. 为了直观看到节点与节点之间的关系,我们要安装rq t

    sudo apt-get install ros-indigo-rqt

    sudo apt-get install ros-indigo-rqt-common-plugins

  3. 再开新终端

    rosrun rqt_graph rqt_graph

    这里弹出个新窗口就可以看到node 和topic了

  4. 下面介绍rostopic命令

    rostopic -h 可以看到rostopic的子命令

    rostopic echo [topic] 实时显示该话题的信息,如果你看看rqt的窗口,可以看到这个rostopic节点也在订阅话题

    rostopic list -v 将每个节点的详细信息列出来,其他的可以通过命令rostopic list -h看。

    rostopic type [topic] rosmsg show turtlesim/Velocity 这命令列出话题的类型,第二个命令则将该话题所期望的消息类型列出来

    rostopic pub [topic] [msg_type] [args] 这命令是把数据发布到当前正在广播的某个话题上。 rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]' rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]' 对比上面两条命令。先说共同的: rostopic pub 将消息给到topic /turtle1/cmd_vel 这是节点 geometry_msgs/Twist 消息类型 ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’参数,由rosmsg show geometry_msgs/Twist得需要线速度角速度x,y,z三个参数

    下面是不同点 第一个命令有-1,使rostopic发布一条消息后马上退出(这里没去rqt上看推出了没有) 第二个命令则是-r 1 ,意思是以1Hz的频率发布命令,这里从rqt上可以看到发布消息的节点多了一个

    rostopic hz /turtle1/pose 可以看到turtlesim_node发布/turtle/pose时的速度